package zhtt.jwt2;

import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by zhaoq on   2024/1/23 15:52
 **/
public class GranafaJwt {
    public static String createGranafaJWT() {
        Map<String, Object> map = new HashMap<>();
        Map<String, Object> headerMap = new HashMap<>();
        headerMap.put("kid", "【这里是kid的值】");
        headerMap.put("typ", "JWT");

        map.put("sub", "admin");
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; //指定签名的时候使用的签名算法，也就是header那部分，jjwt已经将这部分内容封装好了。
        Date now = new Date(System.currentTimeMillis());
        long nowMillis = System.currentTimeMillis();//生成JWT的时间
        //下面就是在为payload添加各种标准声明和私有声明了
        JwtBuilder builder = Jwts.builder() //这里其实就是new一个JwtBuilder，设置jwt的body
                .setHeader(headerMap)
                .setClaims(map)          //如果有私有声明，一定要先设置这个自己创建的私有的声明，这个是给builder的claim赋值，一旦写在标准的声明赋值之后，就是覆盖了那些标准的声明的
                .setIssuedAt(now)           //iat: jwt的签发时间
                .signWith(SignatureAlgorithm.HS256, org.apache.commons.codec.binary.Base64.decodeBase64("【这里是k的值】"));
        //.signWith(SignatureAlgorithm.HS256, "CQeaDwnKEzzChLuMsM_no-ahy8Dk_-Leb2uqEID3kCc");
        //.signWith(Keys.hmacShaKeyFor(org.apache.commons.codec.binary.Base64.decodeBase64("CQeaDwnKEzzChLuMsM_no-ahy8Dk_-Leb2uqEID3kCc")), SignatureAlgorithm.HS256);//设置签名使用的签名算法和签名使用的秘钥
        long expMillis = nowMillis + 3 * 60 * 1000;
        Date exp = new Date(expMillis);
        builder.setExpiration(exp);     //设置过期时间
        return builder.compact();
    }
}
